#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <cstdlib>
#include <cstring>
using namespace std;

void sigcb(int signo){
    cout << signo << endl;
    exit(2);
}

void showBlock(sigset_t set){
    int signo = 1;
    for(; signo <= 50; ++signo){
        if(sigismember(&set, signo))
            cout << "1";
        else
            cout << "0";
    }
    cout << endl;
}
int main(){
    // signal(2, sigcb);
    // while(true){
    //     cout << "正常进程运行中" << endl;
    //     sleep(1);
    // }

    // struct sigaction act, oact;
    // memset(&act, 0, sizeof(act));
    // memset(&oact, 0, sizeof(oact));
    // act.sa_flags = 0;
    // act.sa_handler = sigcb;
    // sigemptyset(&act.sa_mask);

    // sigaction(2, &act, &oact);

    sigset_t set, oset;
    sigemptyset(&set);
    sigemptyset(&oset);
    sigaddset(&set, 2);
    sigaddset(&set, 40);

    sigprocmask(SIG_SETMASK, &set, &oset);


    while(true){
        cout << getpid() << endl;
        cout << "oset: ";
        showBlock(oset);
        cout << "set: ";
        showBlock(set);
        sleep(1);
    }
    return 0;
}